// 常量枚举是使用枚举上的const修饰符定义的：
      // 语法: 
            /* 
            
              const enum 枚举名 {

              }
            */
      // 常量枚举在编译的时候会被完全删除
              // const enum Enum {
              //   A = 1,
              //   B = A * 2,
              // }
              // const a:Enum = Enum.A


              const enum Direction {
                Up,
                Down,
                Left,
                Right,
              }
               
              // 此处用到常量枚举的成员值，在编译后是直接使用常量替换引用，常量枚举不会生成对应的对象，这里取对象的属性值的代码编译的时候直接被替换为具体的常量值
              let directions = [
                Direction.Up,
                Direction.Down,
                Direction.Left,
                Direction.Right,
              ];  


              const ODirection = {
                Up: 0,
                Down: 1,
                Left: 2,
                Right: 3,
              } as const;
              
              type D1irection = typeof ODirection[keyof typeof ODirection];

              // 拿一个对象的类型
                type adda = typeof ODirection
              // 拿一个对象的所有的键组成的联合类型
                type as = keyof typeof ODirection
              // 哪一个对象的所有的value组成的联合类型
              type asd = typeof ODirection[keyof typeof ODirection]
  export {}